package org.jmx;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;

public class MyMemoryManagement {

    public static void main(String[] args)
    throws Exception{
        /**
         * MBean 资源需要注册到 MBean Server 进行代理才可以暴露给外部进行调用，所以我们想要通过远程管理我们自定义的 MyMemory 资源，需要先进行资源代理。
         不加任何 JVM 参数启动 Java 程序，JMX 只能在当前机器访问，如果想要通过网络在真正的远程访问，那么在启动时需要指定当前机器 ip 和开放的端口。
         $ java -Dcom.sun.management.jmxremote=true \  # 开启远程访问
         -Dcom.sun.management.jmxremote.port=8398 \      # 自定义 JMX 端口
         -Dcom.sun.management.jmxremote.ssl=false \      # 是否使用 SSL 协议，生产环境一定要开启
         -Dcom.sun.management.jmxremote.authenticate=false \ # 是否需要认证，生产环境一定要开启
         -Djava.rmi.server.hostname=150.158.2.56 YourClass.java # 当前机器 ip


         我启动的参数如下
         -Dcom.sun.management.jmxremote=true
         -Dcom.sun.management.jmxremote.authenticate=false
         -Dcom.sun.management.jmxremote.port=1234
         -Dcom.sun.management.jmxremote.ssl=false
         -Djava.rmi.server.hostname=A.B.C.D

         是加到 vm option 中
         */
        MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();

        MyMemory myMemory = new MyMemory();
//        System.out.print(System.getProperty("dubbo.token"));
        // 注册 貌似名字可以随便取，按照正常的标准应该是包名，后面是监控的名字
        // 这里名字随便取，只是方便测试
        ObjectName objectName
                = new ObjectName("666.888:type=myMemory66,name=334");
        platformMBeanServer.registerMBean(myMemory,objectName);
        // 保证主线程不死去
        while (true){
            Thread.sleep(3000);

        }
    }
}
